Android OpenGL的简单使用(7):添加颜色

Posted by alonealice on 2020-12-27

添加颜色的种类有两种:

1
2
- Flat coloring             单色
- Smooth coloring 平滑着色

单色

单色就是单一的颜色,调用 glColor4f(float red, float green, float blue, float alpha)方法传入红、绿、蓝、透明度四个参数,取值0~1f。

1
gl.glColor4f(0f, 1f, 0f, 0f);

平滑着色

就是给每个顶点定义一个颜色,然后顶点之间的面会显示渐变色

调用glColorPointer(int size, int type, int stride, Buffer pointer)传入四个参数:

1
2
3
4
- size ———— 指明每个颜色的元素数量,必须为4
- type————— 指明每个矩阵中颜色元素的数据类型
- stride————指明连续的点之间的位偏移,如果stride 为0 时,颜色被紧密挤入矩阵,初始值为0
- pointer———指明包含颜色的缓冲区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Override
public void onDrawFrame(GL10 gl) {

// 清除屏幕
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// 允许设置顶点 // GL10.GL_VERTEX_ARRAY顶点数组
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 开启颜色渲染功能.
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// 设置三角形顶点的颜色
gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);

// 设置顶点
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mBuffer);

// 绘制面
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 5);

//关闭颜色渲染功能.
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

// 禁止顶点设置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

}

重要的点:

  1. 开启颜色渲染和设置三角形顶点的颜色必须要在绘制之前,如果都在绘制之后,上色会失败;
  2. 开启颜色渲染如果在绘制之前,设置三角形顶点的颜色在绘制之后,会crash;
  3. 如果颜色点比顶点少,可能会用黑色来代替,也可能会用中间的过渡色来给顶点上色,这可能会导致顶点的颜色不是设置的颜色;
  4. 多出的颜色值会被抛弃;
  5. alpha值好像没用,设置0和设置1都一样;